package com.it.schoolbookshop_back.controller.admin;

import com.it.schoolbookshop_back.entities.dto.SettingsResponseDTO;
import com.it.schoolbookshop_back.entities.dto.UpdateSettingsDTO;
import com.it.schoolbookshop_back.entities.po.Result;
import com.it.schoolbookshop_back.enums.UserRoleEnums;
import com.it.schoolbookshop_back.service.AdminSettingsService;
import com.it.schoolbookshop_back.utils.UserContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 系统设置管理控制器
 */
@CrossOrigin
@Slf4j
@RestController
@RequestMapping("/api/admin")
public class AdminSettingsController {
    
    @Autowired
    private AdminSettingsService adminSettingsService;
    
    /**
     * 检查是否有管理员权限
     * @return 是否有权限
     */
    private boolean hasAdminPermission() {
        String userRole = UserContext.getRole();
        return userRole != null && userRole.equalsIgnoreCase(UserRoleEnums.ADMIN.name());
    }
    
    /**
     * 获取所有系统设置
     * 仅管理员可访问
     * @return 系统设置列表
     */
    @GetMapping("/settings")
    public Result<List<SettingsResponseDTO>> getAllSettings() {
        // 验证管理员权限
        if (!hasAdminPermission()) {
            log.warn("非管理员用户尝试访问系统设置");
            return Result.forbidden("您没有权限访问系统设置");
        }
        
        log.info("管理员请求获取系统设置");
        List<SettingsResponseDTO> settingsList = adminSettingsService.getAllSettings();
        
        if (settingsList.isEmpty()) {
            log.warn("获取系统设置数据为空");
            return Result.success("暂无系统设置数据", settingsList);
        }
        
        log.info("成功获取系统设置，返回{}条数据", settingsList.size());
        return Result.success("获取系统设置成功", settingsList);
    }
    
    /**
     * 更新系统设置
     * 仅管理员可访问
     * @param updateSettingsDTO 更新设置请求
     * @return 更新结果
     */
    @PostMapping("/settings")
    public Result<Object> updateSettings(@RequestBody UpdateSettingsDTO updateSettingsDTO) {
        // 验证管理员权限
        if (!hasAdminPermission()) {
            log.warn("非管理员用户尝试更新系统设置");
            return Result.forbidden("您没有权限更新系统设置");
        }
        
        // 参数校验
        if (updateSettingsDTO == null || updateSettingsDTO.getSettings() == null || updateSettingsDTO.getSettings().isEmpty()) {
            log.warn("更新系统设置的请求参数为空");
            return Result.validateFailed("请求参数不能为空");
        }
        
        log.info("管理员请求更新系统设置，包含{}项设置", updateSettingsDTO.getSettings().size());
        
        // 执行更新
        boolean success = adminSettingsService.updateSettings(updateSettingsDTO);
        
        if (!success) {
            log.warn("更新系统设置失败");
            return Result.failed("更新系统设置失败，请检查参数或稍后重试");
        }
        
        log.info("更新系统设置成功");
        return Result.success("更新设置成功", null);
    }
}
